home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 April / SGI IRIX 6.5 Applications 2004 April.iso / dist / mpi.idb / usr / include / mpi.h.z / mpi.h
C/C++ Source or Header  |  2003-06-17  |  31KB  |  1,091 lines

  1. /* $Id: mpi.h,v 1.33 2003/03/24 17:12:48 tmiller Exp $ */
  2.  
  3. /*
  4.  *    (C) COPYRIGHT SILICON GRAPHICS, INC.
  5.  *    UNPUBLISHED PROPRIETARY INFORMATION.
  6.  *    ALL RIGHTS RESERVED.
  7.  */
  8.  
  9. /*
  10.  * Copyright Notice
  11.  *  + 1993 University of Chicago
  12.  *  + 1993 Mississippi State University
  13.  */
  14.  
  15. #ifndef MPI_H_INCLUDED
  16. #define MPI_H_INCLUDED
  17.  
  18. #if defined(__cplusplus)
  19. extern "C" {
  20. #endif
  21.  
  22. /******************/
  23. /* MPI-1 bindings */
  24. /******************/
  25.  
  26.  
  27. #define MPI_BOTTOM        ((MPI_Aint)0)
  28.  
  29. typedef long            MPI_Aint;
  30. typedef unsigned int        MPI_Request;
  31. typedef unsigned int        MPI_Group;
  32. typedef unsigned int        MPI_Comm;
  33. typedef unsigned int        MPI_Errhandler;
  34. typedef unsigned int        MPI_Op;
  35. typedef unsigned int        MPI_Datatype;
  36. typedef unsigned int         MPI_Win;
  37.  
  38. typedef struct { 
  39.     int MPI_SOURCE;
  40.     int MPI_TAG;
  41.     int MPI_ERROR;
  42.     int size;
  43.     int reserved[2];
  44. } MPI_Status;
  45.  
  46. extern MPI_Status mpi_sgi_status_ignore;
  47. #define MPI_STATUS_IGNORE (&mpi_sgi_status_ignore)
  48. #define MPI_STATUSES_IGNORE (MPI_STATUS_IGNORE)
  49.  
  50. extern int mpi_sgi_inplace;
  51. #define MPI_IN_PLACE ( (void*)&mpi_sgi_inplace)
  52.  
  53. enum {
  54.     MPI_COMM_NULL        = 0,
  55.     MPI_COMM_WORLD        = 1,
  56.     MPI_COMM_SELF        = 2
  57. };
  58.  
  59. enum {
  60.     MPI_ERRHANDLER_NULL    = 0,
  61.     MPI_ERRORS_ARE_FATAL    = 1,
  62.     MPI_ERRORS_RETURN    = 2
  63. };
  64.  
  65. enum {
  66.     MPI_GROUP_NULL        = 0,
  67.     MPI_GROUP_EMPTY        = 1
  68. };
  69.  
  70. enum {
  71.     MPI_REQUEST_NULL    = 0
  72. };
  73.  
  74. enum {
  75.     MPI_OP_NULL        = 0,
  76.     MPI_MAX            = 1,
  77.     MPI_MIN            = 2,
  78.     MPI_SUM            = 3,
  79.     MPI_PROD        = 4,
  80.     MPI_LAND        = 5,
  81.     MPI_BAND         = 6,
  82.     MPI_LOR            = 7,
  83.     MPI_BOR            = 8,
  84.     MPI_LXOR        = 9,
  85.     MPI_BXOR        = 10,
  86.     MPI_MAXLOC        = 11,
  87.     MPI_MINLOC        = 12
  88. };
  89.  
  90. enum {
  91.     MPI_DATATYPE_NULL    = 0,
  92.  
  93.     MPI_CHAR        = 1,
  94.     MPI_SHORT        = 2,
  95.     MPI_INT            = 3,
  96.     MPI_LONG        = 4,
  97.     MPI_UNSIGNED_CHAR    = 5,
  98.     MPI_UNSIGNED_SHORT    = 6,
  99.     MPI_UNSIGNED        = 7,
  100.     MPI_UNSIGNED_LONG    = 8,
  101.     MPI_FLOAT        = 9,
  102.     MPI_DOUBLE        = 10,
  103.     MPI_LONG_DOUBLE        = 11,
  104.     MPI_LONG_LONG        = 12,
  105.  
  106.     MPI_INTEGER        = 13,
  107.     MPI_REAL        = 14,
  108.     MPI_DOUBLE_PRECISION    = 15,
  109.     MPI_COMPLEX        = 16,
  110.     MPI_DOUBLE_COMPLEX    = 17,
  111.     MPI_LOGICAL        = 18,
  112.     MPI_CHARACTER        = 19,
  113.     MPI_INTEGER1        = 20,
  114.     MPI_INTEGER2        = 21,
  115.     MPI_INTEGER4        = 22,
  116.     MPI_INTEGER8        = 23,
  117.     MPI_REAL4        = 24,
  118.     MPI_REAL8        = 25,
  119.     MPI_REAL16        = 26,
  120.  
  121.     MPI_BYTE        = 27,
  122.     MPI_PACKED        = 28,
  123.     MPI_UB            = 29,
  124.     MPI_LB            = 30,
  125.  
  126.     MPI_FLOAT_INT        = 31,
  127.     MPI_DOUBLE_INT        = 32,
  128.     MPI_LONG_INT        = 33,
  129.     MPI_2INT        = 34,
  130.     MPI_SHORT_INT        = 35,
  131.     MPI_LONG_DOUBLE_INT    = 36,
  132.  
  133.     MPI_2REAL        = 37,
  134.     MPI_2DOUBLE_PRECISION    = 38,
  135.     MPI_2INTEGER        = 39,
  136.     _MPI_SGI_TYPE_LAST
  137. };
  138.  
  139. #define MPI_LONG_LONG_INT    MPI_LONG_LONG
  140.  
  141. enum {
  142.     MPI_SUCCESS            = 0,
  143.  
  144.     /* These 19 error codes are specified by the MPI-1 standard */
  145.  
  146.     MPI_ERR_BUFFER            = 1,
  147.     MPI_ERR_COUNT            = 2,
  148.     MPI_ERR_TYPE            = 3,
  149.     MPI_ERR_TAG            = 4,
  150.     MPI_ERR_COMM            = 5,
  151.     MPI_ERR_RANK            = 6,
  152.     MPI_ERR_REQUEST            = 7,
  153.     MPI_ERR_ROOT            = 8,
  154.     MPI_ERR_GROUP            = 9,
  155.     MPI_ERR_OP            = 10,
  156.     MPI_ERR_TOPOLOGY        = 11,
  157.     MPI_ERR_DIMS            = 12,
  158.     MPI_ERR_ARG            = 13,
  159.     MPI_ERR_UNKNOWN            = 14,
  160.     MPI_ERR_TRUNCATE        = 15,
  161.     MPI_ERR_OTHER            = 16,
  162.     MPI_ERR_INTERN            = 17,
  163.     MPI_ERR_IN_STATUS        = 18,
  164.     MPI_ERR_PENDING            = 19,
  165.  
  166.  
  167.     /* Error codes 20-27 used by MPI on T3E systems. */
  168.  
  169.     /* These 34 error codes are specified by the MPI-2 standard */
  170.  
  171.     MPI_ERR_ACCESS            = 28,
  172.     MPI_ERR_AMODE            = 29,
  173.     MPI_ERR_ASSERT            = 30,
  174.     MPI_ERR_BAD_FILE        = 31,
  175.     MPI_ERR_BASE            = 32,
  176.     MPI_ERR_CONVERSION        = 33,
  177.     MPI_ERR_DISP            = 34,
  178.     MPI_ERR_DUP_DATAREP        = 35,
  179.     MPI_ERR_FILE_EXISTS        = 36,
  180.     MPI_ERR_FILE_IN_USE        = 37,
  181.     MPI_ERR_FILE            = 38,
  182.     MPI_ERR_INFO_KEY        = 39,
  183.     MPI_ERR_INFO_NOKEY        = 40,
  184.     MPI_ERR_INFO_VALUE        = 41,
  185.     MPI_ERR_INFO            = 42,
  186.     MPI_ERR_IO            = 43,
  187.     MPI_ERR_KEYVAL            = 44,
  188.     MPI_ERR_LOCKTYPE        = 45,
  189.     MPI_ERR_NAME            = 46,
  190.     MPI_ERR_NO_MEM            = 47,
  191.     MPI_ERR_NOT_SAME        = 48,
  192.     MPI_ERR_NO_SPACE        = 49,
  193.     MPI_ERR_NO_SUCH_FILE        = 50,
  194.     MPI_ERR_PORT            = 51,
  195.     MPI_ERR_QUOTA            = 52,
  196.     MPI_ERR_READ_ONLY        = 53,
  197.     MPI_ERR_RMA_CONFLICT        = 54,
  198.     MPI_ERR_RMA_SYNC        = 55,
  199.     MPI_ERR_SERVICE            = 56,
  200.     MPI_ERR_SIZE            = 57,
  201.     MPI_ERR_SPAWN            = 58,
  202.     MPI_ERR_UNSUPPORTED_DATAREP    = 59,
  203.     MPI_ERR_UNSUPPORTED_OPERATION    = 60,
  204.     MPI_ERR_WIN            = 61,
  205.     MPI_ERR_LASTCODE        = 100    /* last built-in error code */
  206. };
  207.  
  208. enum {
  209.     MPI_KEYVAL_INVALID    = 0,
  210.     MPI_TAG_UB        = 1,
  211.     MPI_HOST        = 2,
  212.     MPI_IO            = 3,
  213.     MPI_WTIME_IS_GLOBAL    = 4,
  214.     MPI_UNIVERSE_SIZE    = 9,
  215.     MPI_APPNUM        = 11
  216. };
  217.  
  218. enum {
  219.     MPI_IDENT        = 0,
  220.     MPI_CONGRUENT        = 1,
  221.     MPI_SIMILAR        = 2,
  222.     MPI_UNEQUAL        = 3
  223. };
  224.  
  225. enum {
  226.     MPI_GRAPH        = 1,
  227.     MPI_CART        = 2
  228. };
  229.  
  230. enum {
  231.     MPI_UNDEFINED        = -3,
  232.     MPI_ANY_SOURCE        = -2,
  233.     MPI_PROC_NULL        = -1
  234. };
  235.  
  236. enum {
  237.     MPI_ANY_TAG        = -1
  238. };
  239.  
  240. enum {
  241.     MPI_BSEND_OVERHEAD    = 32
  242. };
  243.  
  244. enum {
  245.     MPI_MAX_PROCESSOR_NAME    = 256
  246. };
  247.  
  248. enum {
  249.     MPI_MAX_ERROR_STRING    = 256
  250. };
  251.  
  252. enum {
  253.     MPI_LOCK_SHARED = 1,
  254.     MPI_LOCK_EXCLUSIVE = 2
  255. };
  256.  
  257.  
  258. typedef int MPI_Copy_function(MPI_Comm, int, void *, void *, void *, int *);
  259. typedef int MPI_Delete_function(MPI_Comm, int, void *, void *);
  260. typedef void MPI_Handler_function(MPI_Comm *, int *, ...);
  261. typedef void MPI_User_function(void *, void *, int *, MPI_Datatype *); 
  262.  
  263. MPI_Copy_function        MPI_NULL_COPY_FN, MPI_DUP_FN;
  264. MPI_Delete_function        MPI_NULL_DELETE_FN;
  265.  
  266. typedef int MPI_Comm_copy_attr_function(MPI_Comm, int, void *, void *, void *, int *);
  267. typedef int MPI_Comm_delete_attr_function(MPI_Comm, int, void *, void *);
  268.  
  269. MPI_Comm_copy_attr_function             MPI_COMM_NULL_COPY_FN, MPI_COMM_DUP_FN;
  270. MPI_Comm_delete_attr_function           MPI_COMM_NULL_DELETE_FN;
  271.  
  272. typedef int MPI_Win_copy_attr_function(MPI_Win, int, void *, void *, void *, int *);
  273. typedef int MPI_Win_delete_attr_function(MPI_Win, int, void *, void *);
  274.  
  275. MPI_Win_copy_attr_function             MPI_WIN_NULL_COPY_FN, MPI_WIN_DUP_FN;
  276. MPI_Win_delete_attr_function           MPI_WIN_NULL_DELETE_FN;
  277.  
  278. typedef int MPI_Type_copy_attr_function(MPI_Datatype, int, void *, void *, void *, int *);
  279. typedef int MPI_Type_delete_attr_function(MPI_Datatype, int, void *, void *);
  280.  
  281. MPI_Type_copy_attr_function             MPI_TYPE_NULL_COPY_FN, MPI_TYPE_DUP_FN;
  282. MPI_Type_delete_attr_function           MPI_TYPE_NULL_DELETE_FN;
  283.  
  284. /*************************************/
  285. /* MPI-1 bindings, sorted by chapter */
  286. /*************************************/
  287.  
  288.  
  289. /* 3.2 */
  290.  
  291. int  MPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  292. int PMPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  293.  
  294. int  MPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  295. int PMPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  296.  
  297. int  MPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  298. int PMPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  299.  
  300. /* 3.4 */
  301.  
  302. int  MPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  303. int PMPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  304.  
  305. int  MPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  306. int PMPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  307.  
  308. int  MPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  309. int PMPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  310.  
  311. /* 3.6 */
  312.  
  313. int  MPI_Buffer_attach(void *, int);
  314. int PMPI_Buffer_attach(void *, int);
  315.  
  316. int  MPI_Buffer_detach(void *, int *);
  317. int PMPI_Buffer_detach(void *, int *);
  318.  
  319. /* 3.7 */
  320.  
  321. int  MPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  322. int PMPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  323.  
  324. int  MPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  325. int PMPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  326.  
  327. int  MPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  328. int PMPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  329.  
  330. int  MPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  331. int PMPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  332.  
  333. int  MPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  334. int PMPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  335.  
  336. int  MPI_Wait(MPI_Request *, MPI_Status *);
  337. int PMPI_Wait(MPI_Request *, MPI_Status *);
  338.  
  339. int  MPI_Test(MPI_Request *, int *, MPI_Status *);
  340. int PMPI_Test(MPI_Request *, int *, MPI_Status *);
  341.  
  342. int  MPI_Request_free(MPI_Request *);
  343. int PMPI_Request_free(MPI_Request *);
  344.  
  345. int  MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  346. int PMPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  347.  
  348. int  MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  349. int PMPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  350.  
  351. int  MPI_Waitall(int, MPI_Request *, MPI_Status *);
  352. int PMPI_Waitall(int, MPI_Request *, MPI_Status *);
  353.  
  354. int  MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  355. int PMPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  356.  
  357. int  MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  358. int PMPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  359.  
  360. int  MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  361. int PMPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  362.  
  363. /* 3.8 */
  364.  
  365. int  MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  366. int PMPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  367.  
  368. int  MPI_Probe(int, int, MPI_Comm, MPI_Status *);
  369. int PMPI_Probe(int, int, MPI_Comm, MPI_Status *);
  370.  
  371. int  MPI_Cancel(MPI_Request *);
  372. int PMPI_Cancel(MPI_Request *);
  373.  
  374. int  MPI_Test_cancelled(MPI_Status *, int *);
  375. int PMPI_Test_cancelled(MPI_Status *, int *);
  376.  
  377. /* 3.9 */
  378.  
  379. int  MPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  380. int PMPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  381.  
  382. int  MPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  383. int PMPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  384.  
  385. int  MPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  386. int PMPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  387.  
  388. int  MPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  389. int PMPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  390.  
  391. int  MPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  392. int PMPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  393.  
  394. int  MPI_Start(MPI_Request *);
  395. int PMPI_Start(MPI_Request *);
  396.  
  397. int  MPI_Startall(int, MPI_Request *);
  398. int PMPI_Startall(int, MPI_Request *);
  399.  
  400. /* 3.10 */
  401.  
  402. int  MPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  403. int PMPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  404.  
  405. int  MPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  406. int PMPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  407.  
  408. /* 3.12 */
  409.  
  410. int  MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  411. int PMPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  412.  
  413. int  MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  414. int PMPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  415.  
  416. int  MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  417. int PMPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  418.  
  419. int  MPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  420. int PMPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  421.  
  422. int  MPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  423. int PMPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  424.  
  425. int  MPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  426. int PMPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  427.  
  428. int  MPI_Address(void *, MPI_Aint *);
  429. int PMPI_Address(void *, MPI_Aint *);
  430.  
  431. int  MPI_Type_extent(MPI_Datatype, MPI_Aint *);
  432. int PMPI_Type_extent(MPI_Datatype, MPI_Aint *);
  433.  
  434. int  MPI_Type_size(MPI_Datatype, int *);
  435. int PMPI_Type_size(MPI_Datatype, int *);
  436.  
  437. int  MPI_Type_lb(MPI_Datatype, MPI_Aint *);
  438. int PMPI_Type_lb(MPI_Datatype, MPI_Aint *);
  439.  
  440. int  MPI_Type_ub(MPI_Datatype, MPI_Aint *);
  441. int PMPI_Type_ub(MPI_Datatype, MPI_Aint *);
  442.  
  443. int  MPI_Type_commit(MPI_Datatype *);
  444. int PMPI_Type_commit(MPI_Datatype *);
  445.  
  446. int  MPI_Type_free(MPI_Datatype *);
  447. int PMPI_Type_free(MPI_Datatype *);
  448.  
  449. int  MPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  450. int PMPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  451.  
  452. /* 3.13 */
  453.  
  454. int  MPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  455. int PMPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  456.  
  457. int  MPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  458. int PMPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  459.  
  460. int  MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  461. int PMPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  462.  
  463. /* 4.3 */
  464.  
  465. int  MPI_Barrier(MPI_Comm);
  466. int PMPI_Barrier(MPI_Comm);
  467.  
  468. /* 4.4 */
  469.  
  470. int  MPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  471. int PMPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  472.  
  473. /* 4.5 */
  474.  
  475. int  MPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  476. int PMPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  477.  
  478. int  MPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  479. int PMPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  480.  
  481. /* 4.6 */
  482.  
  483. int  MPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  484. int PMPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  485.  
  486. int  MPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  487. int PMPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  488.  
  489. /* 4.7 */
  490.  
  491. int  MPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  492. int PMPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  493.  
  494. int  MPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  495. int PMPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  496.  
  497. /* 4.8 */
  498.  
  499. int  MPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  500. int PMPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  501.  
  502. int  MPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  503. int PMPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  504.  
  505. /* 4.9 */
  506.  
  507. int  MPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  508. int PMPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  509.  
  510. int  MPI_Op_create(MPI_User_function *, int, MPI_Op *);
  511. int PMPI_Op_create(MPI_User_function *, int, MPI_Op *);
  512.  
  513. int  MPI_Op_free(MPI_Op *);
  514. int PMPI_Op_free(MPI_Op *);
  515.  
  516. int  MPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  517. int PMPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  518.  
  519. /* 4.10 */
  520.  
  521. int  MPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  522. int PMPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  523.  
  524. /* 4.11 */
  525.  
  526. int  MPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  527. int PMPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  528.  
  529. /* 5.3 */
  530.  
  531. int  MPI_Group_size(MPI_Group, int *);
  532. int PMPI_Group_size(MPI_Group, int *);
  533.  
  534. int  MPI_Group_rank(MPI_Group, int *);
  535. int PMPI_Group_rank(MPI_Group, int *);
  536.  
  537. int  MPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  538. int PMPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  539.  
  540. int  MPI_Group_compare(MPI_Group, MPI_Group, int *);
  541. int PMPI_Group_compare(MPI_Group, MPI_Group, int *);
  542.  
  543. int  MPI_Comm_group(MPI_Comm, MPI_Group *);
  544. int PMPI_Comm_group(MPI_Comm, MPI_Group *);
  545.  
  546. int  MPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  547. int PMPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  548.  
  549. int  MPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  550. int PMPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  551.  
  552. int  MPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  553. int PMPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  554.  
  555. int  MPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  556. int PMPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  557.  
  558. int  MPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  559. int PMPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  560.  
  561. int  MPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  562. int PMPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  563.  
  564. int  MPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  565. int PMPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  566.  
  567. int  MPI_Group_free(MPI_Group *);
  568. int PMPI_Group_free(MPI_Group *);
  569.  
  570. /* 5.4 */
  571.  
  572. int  MPI_Comm_size(MPI_Comm, int *);
  573. int PMPI_Comm_size(MPI_Comm, int *);
  574.  
  575. int  MPI_Comm_rank(MPI_Comm, int *);
  576. int PMPI_Comm_rank(MPI_Comm, int *);
  577.  
  578. int  MPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  579. int PMPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  580.  
  581. int  MPI_Comm_dup(MPI_Comm, MPI_Comm *);
  582. int PMPI_Comm_dup(MPI_Comm, MPI_Comm *);
  583.  
  584. int  MPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  585. int PMPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  586.  
  587. int  MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  588. int PMPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  589.  
  590. int  MPI_Comm_free(MPI_Comm *);
  591. int PMPI_Comm_free(MPI_Comm *);
  592.  
  593. /* 5.6 */
  594.  
  595. int  MPI_Comm_test_inter(MPI_Comm, int *);
  596. int PMPI_Comm_test_inter(MPI_Comm, int *);
  597.  
  598. int  MPI_Comm_remote_size(MPI_Comm, int *);
  599. int PMPI_Comm_remote_size(MPI_Comm, int *);
  600.  
  601. int  MPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  602. int PMPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  603.  
  604. int  MPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  605. int PMPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  606.  
  607. int  MPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  608. int PMPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  609.  
  610. /* 5.7 */
  611.  
  612. int  MPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  613. int PMPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  614.  
  615. int  MPI_Keyval_free(int *);
  616. int PMPI_Keyval_free(int *);
  617.  
  618. int  MPI_Attr_put(MPI_Comm, int, void *);
  619. int PMPI_Attr_put(MPI_Comm, int, void *);
  620.  
  621. int  MPI_Attr_get(MPI_Comm, int, void *, int *);
  622. int PMPI_Attr_get(MPI_Comm, int, void *, int *);
  623.  
  624. int  MPI_Attr_delete(MPI_Comm, int);
  625. int PMPI_Attr_delete(MPI_Comm, int);
  626.  
  627. /* 6.5 */
  628.  
  629. int  MPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  630. int PMPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  631.  
  632. int  MPI_Dims_create(int, int, int *);
  633. int PMPI_Dims_create(int, int, int *);
  634.  
  635. int  MPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  636. int PMPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  637.  
  638. int  MPI_Topo_test(MPI_Comm, int *);
  639. int PMPI_Topo_test(MPI_Comm, int *);
  640.  
  641. int  MPI_Graphdims_get(MPI_Comm, int *, int *);
  642. int PMPI_Graphdims_get(MPI_Comm, int *, int *);
  643.  
  644. int  MPI_Graph_get(MPI_Comm, int, int, int *, int *);
  645. int PMPI_Graph_get(MPI_Comm, int, int, int *, int *);
  646.  
  647. int  MPI_Cartdim_get(MPI_Comm, int *);
  648. int PMPI_Cartdim_get(MPI_Comm, int *);
  649.  
  650. int  MPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  651. int PMPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  652.  
  653. int  MPI_Cart_rank(MPI_Comm, int *, int *);
  654. int PMPI_Cart_rank(MPI_Comm, int *, int *);
  655.  
  656. int  MPI_Cart_coords(MPI_Comm, int, int, int *);
  657. int PMPI_Cart_coords(MPI_Comm, int, int, int *);
  658.  
  659. int  MPI_Graph_neighbors_count(MPI_Comm, int, int *);
  660. int PMPI_Graph_neighbors_count(MPI_Comm, int, int *);
  661.  
  662. int  MPI_Graph_neighbors(MPI_Comm, int, int, int *);
  663. int PMPI_Graph_neighbors(MPI_Comm, int, int, int *);
  664.  
  665. int  MPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  666. int PMPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  667.  
  668. int  MPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  669. int PMPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  670.  
  671. int  MPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  672. int PMPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  673.  
  674. int  MPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  675. int PMPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  676.  
  677. /* 7.1 */
  678.  
  679. int  MPI_Get_processor_name(char *, int *);
  680. int PMPI_Get_processor_name(char *, int *);
  681.  
  682. /* 7.2 */
  683.  
  684. int  MPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  685. int PMPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  686.  
  687. int  MPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  688. int PMPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  689.  
  690. int  MPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  691. int PMPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  692.  
  693. int  MPI_Errhandler_free(MPI_Errhandler *);
  694. int PMPI_Errhandler_free(MPI_Errhandler *);
  695.  
  696. int  MPI_Error_string(int, char *, int *);
  697. int PMPI_Error_string(int, char *, int *);
  698.  
  699. /* 7.3 */
  700.  
  701. int  MPI_Error_class(int, int *);
  702. int PMPI_Error_class(int, int *);
  703.  
  704. /* 7.4 */
  705.  
  706. double  MPI_Wtime(void);
  707. double PMPI_Wtime(void);
  708.  
  709. double  MPI_Wtick(void);
  710. double PMPI_Wtick(void);
  711.  
  712. /* 7.5 */
  713.  
  714. int  MPI_Init(int *, char ***);
  715. int PMPI_Init(int *, char ***);
  716.  
  717. int  MPI_Finalize(void);
  718. int PMPI_Finalize(void);
  719.  
  720. int  MPI_Initialized(int *);
  721. int PMPI_Initialized(int *);
  722.  
  723. int  MPI_Abort(MPI_Comm, int);
  724. int PMPI_Abort(MPI_Comm, int);
  725.  
  726. /* 8.3 */
  727.  
  728. int  MPI_Pcontrol(int, ...);
  729. int PMPI_Pcontrol(int, ...);
  730.  
  731. /********************/
  732. /* MPI-1.2 bindings */
  733. /********************/
  734.  
  735. #define MPI_VERSION        1
  736. #define MPI_SUBVERSION        2
  737.  
  738. int  MPI_Get_version(int *, int *);
  739. int PMPI_Get_version(int *, int *);
  740.  
  741.  
  742. /*************************************/
  743. /* MPI-2 bindings, sorted by chapter */
  744. /*************************************/
  745.  
  746. /* 4.5.2 */
  747.  
  748. int  MPI_Request_get_status(MPI_Request, int *, MPI_Status *);
  749. int PMPI_Request_get_status(MPI_Request, int *, MPI_Status *);
  750.  
  751.  
  752. /* 4.10 */
  753.  
  754. typedef unsigned int          MPI_Info;
  755.  
  756. enum {
  757.     MPI_INFO_NULL        = 0,
  758.     MPI_MAX_INFO_KEY        = 255,
  759.     MPI_MAX_INFO_VAL        = 1024
  760. };
  761.  
  762. enum {
  763.     MPI_FUNDAMENTAL        = -1
  764. };
  765.  
  766. int  MPI_Info_create(MPI_Info *);
  767. int  PMPI_Info_create(MPI_Info *);
  768.  
  769. int MPI_Info_delete(MPI_Info, char *);
  770. int PMPI_Info_delete(MPI_Info, char *);
  771.  
  772. int MPI_Info_dup(MPI_Info, MPI_Info *);
  773. int PMPI_Info_dup(MPI_Info, MPI_Info *);
  774.  
  775. int MPI_Info_free(MPI_Info *);
  776. int PMPI_Info_free(MPI_Info *);
  777.  
  778. int MPI_Info_get(MPI_Info, char *, int, char *, int *);
  779. int PMPI_Info_get(MPI_Info, char *, int, char *, int *);
  780.  
  781. int MPI_Info_get_nkeys(MPI_Info, int *);
  782. int PMPI_Info_get_nkeys(MPI_Info, int *);
  783.  
  784. int MPI_Info_get_nthkey(MPI_Info, int, char *);
  785. int PMPI_Info_get_nthkey(MPI_Info, int, char *);
  786.  
  787. int MPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
  788. int PMPI_Info_get_valuelen(MPI_Info, char *, int *, int *);
  789.  
  790. int MPI_Info_set(MPI_Info, char *, char *);
  791. int PMPI_Info_set(MPI_Info, char *, char *);
  792.  
  793. /* 4.11 */
  794.  
  795. int MPI_Alloc_mem(MPI_Aint,MPI_Info,void *);
  796. int PMPI_Alloc_mem(MPI_Aint,MPI_Info,void *);
  797.  
  798. int MPI_Free_mem(void *);
  799. int PMPI_Free_mem(void *);
  800.  
  801. /* 4.12 */
  802.  
  803. typedef int MPI_Fint;
  804.  
  805. MPI_Fint MPI_Info_c2f(MPI_Info);
  806. MPI_Fint PMPI_Info_c2f(MPI_Info);
  807.  
  808. MPI_Info MPI_Info_f2c(MPI_Fint);
  809. MPI_Info PMPI_Info_f2c(MPI_Fint);
  810.  
  811. MPI_Fint MPI_Comm_c2f(MPI_Comm);
  812. MPI_Fint PMPI_Comm_c2f(MPI_Comm);
  813.  
  814. MPI_Comm MPI_Comm_f2c(MPI_Fint);
  815. MPI_Comm PMPI_Comm_f2c(MPI_Fint);
  816.  
  817. MPI_Fint MPI_Type_c2f(MPI_Datatype);
  818. MPI_Fint PMPI_Type_c2f(MPI_Datatype);
  819.  
  820. MPI_Datatype MPI_Type_f2c(MPI_Fint);
  821. MPI_Datatype PMPI_Type_f2c(MPI_Fint);
  822.  
  823. MPI_Fint MPI_Group_c2f(MPI_Group);
  824. MPI_Fint PMPI_Group_c2f(MPI_Group);
  825.  
  826. MPI_Group MPI_Group_f2c(MPI_Fint);
  827. MPI_Group PMPI_Group_f2c(MPI_Fint);
  828.  
  829. MPI_Fint MPI_Request_c2f(MPI_Request);
  830. MPI_Fint PMPI_Request_c2f(MPI_Request);
  831.  
  832. MPI_Request MPI_Request_f2c(MPI_Fint);
  833. MPI_Request PMPI_Request_f2c(MPI_Fint);
  834.  
  835. MPI_Fint MPI_Op_c2f(MPI_Op);
  836. MPI_Fint PMPI_Op_c2f(MPI_Op);
  837.  
  838. MPI_Op MPI_Op_f2c(MPI_Fint);
  839. MPI_Op PMPI_Op_f2c(MPI_Fint);
  840.  
  841.  
  842. /* 4.14 */
  843.  
  844. int  MPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  845. int PMPI_Type_create_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  846.  
  847. int  MPI_Type_create_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  848. int PMPI_Type_create_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  849.  
  850. int  MPI_Type_create_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  851. int PMPI_Type_create_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  852.  
  853. int MPI_Get_address(void *, MPI_Aint *);
  854. int PMPI_Get_address(void *, MPI_Aint *);
  855.  
  856. /* 5.3 */
  857.  
  858. #define MPI_ARGV_NULL              ((char **)NULL)
  859. #define MPI_ARGVS_NULL              ((char ***)NULL)
  860. #define MPI_ERRCODES_IGNORE        ((int *)NULL)
  861.  
  862. int MPI_Comm_spawn(char *, char **, int, MPI_Info, int, MPI_Comm, MPI_Comm *, int *);
  863. int PMPI_Comm_spawn(char *, char **, int, MPI_Info, int, MPI_Comm, MPI_Comm *, int *);
  864. int MPI_Comm_spawn_multiple(int , char **, char ***, int *, MPI_Info *,
  865.                             int , MPI_Comm, MPI_Comm *, int *); 
  866. int PMPI_Comm_spawn_multiple(int , char **, char ***, int *, MPI_Info *,
  867.                             int , MPI_Comm, MPI_Comm *, int *); 
  868. int MPI_Comm_get_parent(MPI_Comm *);
  869. int PMPI_Comm_get_parent(MPI_Comm *);
  870.  
  871. /* 6 */
  872.  
  873. /* MPI one-sided is supported only under ABI 64.  */
  874. #if     !_ABIN32
  875.  
  876. enum {
  877.     MPI_WIN_NULL     = 0
  878. };
  879.  
  880. /* referenced in 4.12 of MPI-2 standard with other transfer of handles functions */
  881.  
  882. MPI_Fint MPI_Win_c2f(MPI_Win);
  883. MPI_Fint PMPI_Win_c2f(MPI_Win);
  884.  
  885. MPI_Win MPI_Win_f2c(MPI_Fint);
  886. MPI_Win PMPI_Win_f2c(MPI_Fint);
  887.  
  888. /* 6.2 */
  889.  
  890. int  MPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
  891. int PMPI_Win_create(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
  892.  
  893. int  MPI_Win_fence(int, MPI_Win);
  894. int PMPI_Win_fence(int, MPI_Win);
  895.  
  896. int  MPI_Win_free(MPI_Win *);
  897. int PMPI_Win_free(MPI_Win *);
  898.  
  899. int  MPI_Win_lock(int, int, int, MPI_Win);
  900. int PMPI_Win_lock(int, int, int, MPI_Win);
  901. int  MPI_Win_unlock(int, MPI_Win);
  902. int PMPI_Win_unlock(int, MPI_Win);
  903.  
  904. /* 6.3 */
  905.  
  906.  
  907. int  MPI_Put(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  908.     MPI_Win);
  909. int PMPI_Put(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  910.     MPI_Win);
  911.  
  912. int  MPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  913.     MPI_Win);
  914. int PMPI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,
  915.     MPI_Win);
  916.  
  917. int  MPI_Accumulate(void *, int, MPI_Datatype, int, MPI_Aint, int,
  918.     MPI_Datatype, MPI_Op, MPI_Win);
  919. int PMPI_Accumulate(void *, int, MPI_Datatype, int, MPI_Aint, int,
  920.     MPI_Datatype, MPI_Op, MPI_Win);
  921.  
  922. /* 6.4 */
  923.  
  924. enum {
  925.     MPI_MODE_NOCHECK    = 1,
  926.     MPI_MODE_NOSTORE    = 2,
  927.     MPI_MODE_NOPUT        = 4,
  928.     MPI_MODE_NOPRECEDE    = 8,
  929.     MPI_MODE_NOSUCCEED     = 16
  930. };
  931.  
  932.  
  933. #endif    /* !_ABIN32 */
  934.  
  935.  
  936. /* 7.5 */
  937.  
  938. int  MPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  939. int PMPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  940.  
  941. int  MPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  942. int PMPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  943.  
  944. /* 7.8 */
  945.  
  946. int  MPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  947. int PMPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  948.  
  949. /* 8.2 */
  950.  
  951.  
  952. typedef int MPI_Grequest_query_function(void *extra_state, MPI_Status *status);
  953. typedef int MPI_Grequest_free_function(void *extra_state);
  954. typedef int MPI_Grequest_cancel_function(void *extra_state, int complete);
  955.  
  956. int  MPI_Grequest_complete(MPI_Request *);
  957. int PMPI_Grequest_complete(MPI_Request *);
  958.  
  959. int  MPI_Grequest_start(MPI_Grequest_query_function, MPI_Grequest_free_function, MPI_Grequest_cancel_function, void *, MPI_Request *);
  960. int PMPI_Grequest_start(MPI_Grequest_query_function, MPI_Grequest_free_function, MPI_Grequest_cancel_function, void *, MPI_Request *);
  961.  
  962. int  MPI_Status_set_cancelled(MPI_Status *, int);
  963. int PMPI_Status_set_cancelled(MPI_Status *, int);
  964.  
  965. int  MPI_Status_set_elements(MPI_Status *, MPI_Datatype, int);
  966. int PMPI_Status_set_elements(MPI_Status *, MPI_Datatype, int);
  967.  
  968. /* 8.6 */
  969.  
  970. enum {
  971.     MPI_COMBINER_NAMED          = (-1),
  972.     MPI_COMBINER_CONTIGUOUS     = 0,
  973.     MPI_COMBINER_VECTOR         = 1,
  974.     MPI_COMBINER_HVECTOR        = 2,
  975.     MPI_COMBINER_INDEXED        = 3,
  976.     MPI_COMBINER_HINDEXED       = 4,
  977.     MPI_COMBINER_STRUCT         = 5,
  978.     MPI_COMBINER_DARRAY        = 6,
  979.     MPI_COMBINER_DUP        = 7,
  980.     MPI_COMBINER_F90_COMPLES    = 8,
  981.     MPI_COMBINER_F90_INTEGER    = 9,
  982.     MPI_COMBINER_F90_REAL        = 10,
  983.     MPI_COMBINER_HINDEXED_INTEGER    = 11,
  984.     MPI_COMBINER_HVECTOR_INTEGER    = 12,
  985.     MPI_COMBINER_INDEXED_BLOCK    = 13,
  986.     MPI_COMBINER_RESIZED        = 14,
  987.     MPI_COMBINER_STRUCT_INTEGER    = 15,
  988.     MPI_COMBINER_SUBARRAY        = 16
  989. };
  990.  
  991. /* 8.7 */
  992.  
  993. int  MPI_Init_thread(int *, char ***, int, int *);
  994. int PMPI_Init_thread(int *, char ***, int, int *);
  995. int  MPI_Query_thread(int *);
  996. int PMPI_Query_thread(int *);
  997. int  MPI_Is_thread_main(int *);
  998. int PMPI_Is_thread_main(int *);
  999.  
  1000. enum {
  1001.     MPI_THREAD_SINGLE        = 0,
  1002.     MPI_THREAD_FUNNELED        = 1,
  1003.     MPI_THREAD_SERIALIZED        = 2,
  1004.     MPI_THREAD_MULTIPLE        = 3
  1005. };
  1006.  
  1007. /* 8.8 */
  1008.  
  1009.  
  1010. int   MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, 
  1011.                           int *, void *);
  1012. int  PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, 
  1013.                           int *, void *);
  1014.  
  1015. int  MPI_Comm_free_keyval(int *);
  1016. int PMPI_Comm_free_keyval(int *);
  1017.  
  1018. int  MPI_Comm_set_attr(MPI_Comm, int, void *);
  1019. int PMPI_Comm_set_attr(MPI_Comm, int, void *);
  1020.  
  1021. int  MPI_Comm_get_attr(MPI_Comm, int, void *, int *);
  1022. int PMPI_Comm_get_attr(MPI_Comm, int, void *, int *);
  1023.  
  1024. int  MPI_Comm_delete_attr(MPI_Comm, int);
  1025. int PMPI_Comm_delete_attr(MPI_Comm, int);
  1026.  
  1027. /* MPI one-sided is supported only under ABI 64.  */
  1028. #if     !_ABIN32
  1029.  
  1030. enum {
  1031.         MPI_WIN_BASE            = 1,
  1032.         MPI_WIN_SIZE            = 2,
  1033.         MPI_WIN_DISP_UNIT       = 3
  1034. };
  1035.  
  1036. int   MPI_Win_create_keyval(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *,
  1037.                           int *, void *);
  1038. int  PMPI_Win_create_keyval(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *,
  1039.                           int *, void *);
  1040.  
  1041. int  MPI_Win_free_keyval(int *);
  1042. int PMPI_Win_free_keyval(int *);
  1043.  
  1044. int  MPI_Win_set_attr(MPI_Win, int, void *);
  1045. int PMPI_Win_set_attr(MPI_Win, int, void *);
  1046.  
  1047. int  MPI_Win_get_attr(MPI_Win, int, void *, int *);
  1048. int PMPI_Win_get_attr(MPI_Win, int, void *, int *);
  1049.  
  1050. int  MPI_Win_delete_attr(MPI_Win, int);
  1051. int PMPI_Win_delete_attr(MPI_Win, int);
  1052.  
  1053. #endif    /* !_ABIN32 */
  1054.  
  1055. int   MPI_Type_create_keyval(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *,
  1056.                           int *, void *);
  1057. int  PMPI_Type_create_keyval(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *,
  1058.                           int *, void *);
  1059.  
  1060. int  MPI_Type_free_keyval(int *);
  1061. int PMPI_Type_free_keyval(int *);
  1062.  
  1063. int  MPI_Type_set_attr(MPI_Datatype, int, void *);
  1064. int PMPI_Type_set_attr(MPI_Datatype, int, void *);
  1065.  
  1066. int  MPI_Type_get_attr(MPI_Datatype, int, void *, int *);
  1067. int PMPI_Type_get_attr(MPI_Datatype, int, void *, int *);
  1068.  
  1069. int  MPI_Type_delete_attr(MPI_Datatype, int);
  1070. int PMPI_Type_delete_attr(MPI_Datatype, int);
  1071.  
  1072.  
  1073. /* 9.6 */
  1074.  
  1075. int  MPI_Finalized(int *);
  1076. int PMPI_Finalized(int *);
  1077.  
  1078. #if defined(__cplusplus)
  1079. }
  1080. #if !defined(MPI_NO_CPPBIND)
  1081. #include "mpi++.h"
  1082. #endif
  1083. #endif
  1084.  
  1085. /*
  1086.  * mpio.h must be included after mpi.h 
  1087.  */
  1088. #include "mpio.h"
  1089.  
  1090. #endif    /* MPI_H_INCLUDED */
  1091.